package com.cy.pj.common.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;

/**
 * @author 张琪
 * @date 2020/11/12
 * @describe
 */
@Order(2)       // 定义优先级, 数字越小, 权限越高
@Aspect         // 用于描述切面类型
public class SysLogAspect1 {

//    定义切面中的切入点(四种表达式, bean, within, extend)
//    @Pointcut("@annotation(com.cy.pj.common.anno.TestFindMethod)")      //指定使用 该注解的方法 为程序的切入点
    public void doLog(){};

    /* 该方法 实际上为 Advice(通知) , 用来在接入点上执行特定功能, 具体执行时间由注解来选定
    * @Around 描述切面中方法*/
//    @Around("doLog()")      //连接点 : 一般指被拦截到的方法,  这里拦截到的是使用了@testFindMethod注解的方法(具体对象的具体方法)
    public Object doLogAspect(ProceedingJoinPoint joinPoint) throws Throwable{
        long t1 = System.currentTimeMillis();
        Object result = joinPoint.proceed();
        long t2 = System.currentTimeMillis();

        System.err.println("执行时间为 : " + (t2 - t1));
        return result;
    }

}
